package com.ming_za.odupdaterserver.core.utils.account.preparatory;

import lombok.Getter;

/**
 * 预备的常用账号管理器方案，使用该方案减少配置量
 */
@Getter
public enum AccountType {

    /**
     * 非安全性单账号
     * <p>
     *     只有一个账号，用于不需要考虑多用户的程序，为程序加入管理密码
     * </p>
     * <pre>
     *    默认等级：0
     *    注册时记录ip：否
     *    登录时检测ip：否
     *    验证token时检测ip：否
     * </pre>
     */
    UNSAFE_SINGLE_ACCOUNT(false,0,false,false,false),

    /**
     * 安全性单账号
     * <p>
     *     只有一个账号，用于不需要考虑多用户的程序，为程序加入管理密码
     * </p>
     * <pre>
     *    默认等级：0
     *    注册时记录ip：否
     *    登录时检测ip：是
     *    验证token时检测ip：是
     * </pre>
     */
    SAFE_SINGLE_ACCOUNT(false,0,false,true,true),

    /**
     * 普通单账号
     * <p>
     *     只有一个账号，用于不需要考虑多用户的程序，为程序加入管理密码
     * </p>
     * <pre>
     *    默认等级：0
     *    注册时记录ip：否
     *    登录时检测ip：否
     *    验证token时检测ip：是
     * </pre>
     */
    NORMAL_SINGLE_ACCOUNT(false,0,false,false,true),

    /**
     * 基础WEB用户账号,多个账号
     * <pre>
     *    默认等级：0
     *    注册时记录ip：是
     *    登录时检测ip：否
     *    验证token时检测ip：是
     * </pre>

     */
    BASE_WEB_ACCOUNT(true,0,true,false,true),

    /**
     * 非安全性账号多账号
     * <pre>
     *    默认等级：0
     *    注册时记录ip：否
     *    登录时检测ip：否
     *    验证token时检测ip：否
     * </pre>
     */
    UNSAFE_MULTIPLE_ACCOUNT(true,0,false,false,false),

    /**
     * 安全性账号多账号
     * <pre>
     *    默认等级：0
     *    注册时记录ip：是
     *    登录时检测ip：是
     *    验证token时检测ip：是
     * </pre>
     */
    SAFE_MULTIPLE_ACCOUNT(true,0,true,true,true),

    ;
    private final boolean hasAccount;
    private final int defaultLevel;
    private final boolean recordIpWhenRegister;
    private final boolean checkIpWhenLogin;
    private final boolean checkIpWhenCheckToken;

    AccountType(boolean hasAccount, int defaultLevel, boolean recordIpWhenRegister, boolean checkIpWhenLogin, boolean checkIpWhenCheckToken) {
        this.hasAccount = hasAccount;
        this.defaultLevel = defaultLevel;
        this.recordIpWhenRegister = recordIpWhenRegister;
        this.checkIpWhenLogin = checkIpWhenLogin;
        this.checkIpWhenCheckToken = checkIpWhenCheckToken;
    }
}
